www.gusucode.com > 基于纹理的图像检索源码 > 基于纹理的图像检索源码/dt_cwt texture/coldfilt.m

    function Y = coldfilt(X, ha, hb)

% function Y = coldfilt(X, ha, hb)
% Filter the columns of image X using the two filters ha and hb = reverse(ha).
% ha operates on the odd samples of X and hb on the even samples.
% Both filters should be even length, and h should be approx linear phase with
% a quarter sample advance from its mid pt (ie |h(m/2)| > |h(m/2 + 1)|).
%
%                   ext        top edge                     bottom edge       ext
% Level 1:        !               |               !               |               !
% odd filt on .    b   b   b   b   a   a   a   a   a   a   a   a   b   b   b   b   
% odd filt on .      a   a   a   a   b   b   b   b   b   b   b   b   a   a   a   a
% Level 2:        !               |               !               |               !
% +q filt on x      b       b       a       a       a       a       b       b       
% -q filt on o          a       a       b       b       b       b       a       a
%
% The output is decimated by two from the input sample rate and the results
% from the two filters, Ya and Yb, are interleaved to give Y.
% Symmetric extension with repeated end samples is used on the composite X
% columns before each filter is applied.
%
% Cian Shaffrey, Nick Kingsbury
% Cambridge University, August 2000

[r,c] = size(X);
if rem(r,4) > 0, error('No. of rows in X must be a multiple of 4!'); end
m = length(ha);
if m ~= length(hb), error('Lengths of ha and hb must be the same!'); end
if rem(m,2) > 0, error('Lengths of ha and hb must be even!'); end
m2 = fix(m/2);

% Set up vector for symmetric extension of X with repeated end samples.
xe = reflect([(1-m):(r+m)], 0.5, r+0.5); % Use 'reflect' so d < m works OK.

% Select odd and even samples from ha and hb.
hao = ha(1:2:m);
hae = ha(2:2:m);
hbo = hb(1:2:m);
hbe = hb(2:2:m);
t = [6:4:(r+2*m-2)];

r2 = r/2;
Y = zeros(r2,c);
if sum(ha.*hb) > 0,
   s1 = 1:2:r2; 
   s2 = s1 + 1;
else
   s2 = 1:2:r2; 
   s1 = s2 + 1;
end

% Perform filtering on columns of extended matrix X(xe,:) in 4 ways. 
Y(s1,:) = conv2(X(xe(t-1),:),hao(:),'valid') + conv2(X(xe(t-3),:),hae(:),'valid');
Y(s2,:) = conv2(X(xe(t),:),hbo(:),'valid') + conv2(X(xe(t-2),:),hbe(:),'valid');

return